#允许以动态的方式生成HTML页面
from django import template 
from ..models import Post
from django.db.models import Count
from django.utils.safestring import mark_safe 
import markdown #轻量级语言

#使用 template 中的 Library()创建一个自定义标签注册器
#将我们定义的函数注册为一个自定义标签
register = template.Library()
#允许我们创建自定义模板过滤器去执行自己定义的过滤行为
#将 Markdown 格式的文本转换成 HTML 格式
@register.filter(name='markdown')
def markdown_format(text):
    return mark_safe(markdown.markdown(text))

# 将定义的函数 total_posts 注册为自定义标签

@register.simple_tag
# 定义一个自定义标签
def total_posts():
    # 返回当前发布文章的数量
    
    return Post.published.count()

#最近发布
@register.inclusion_tag('blog/post/latest_posts.html')
#获取最近发布的5篇文章
def show_latest_posts(count=5):
    #获取最近发布的文章
    latest_posts = Post.published.order_by('-publish')[:count]
     #将最近发布的文章传递至模板
    return {'latest_posts':latest_posts}

#最多评论
@register.simple_tag
#显示5篇文章  count是函数参数
def get_most_commented_posts(count=5):
    #对发布的文章进行统计评论数量保存按照评论数量分组后按评论数量从大小排序取前参数个
    return Post.published.annotate(
        total_comments=Count('comments')
    ).order_by('-total_comments')[:count]
